package com.cencat.merchant.entity;

import com.baomidou.mybatisplus.annotation.*;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 司机信息实体类
 * 
 * @author cencat
 * @since 2024
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("biz_driver")
public class DriverEntity {
    
    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    
    /**
     * 租户ID
     */
    @NotNull(message = "租户ID不能为空")
    @TableField("tenant_id")
    private Long tenantId;
    
    /**
     * 司机编号
     */
    @NotBlank(message = "司机编号不能为空")
    @Size(max = 50, message = "司机编号长度不能超过50个字符")
    @TableField("driver_code")
    private String driverCode;
    
    /**
     * 司机姓名
     */
    @NotBlank(message = "司机姓名不能为空")
    @Size(max = 50, message = "司机姓名长度不能超过50个字符")
    @TableField("driver_name")
    private String driverName;
    
    /**
     * 手机号码
     */
    @NotBlank(message = "手机号码不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
    @TableField("phone")
    private String phone;
    
    /**
     * 身份证号
     */
    @Size(max = 18, message = "身份证号长度不能超过18个字符")
    @TableField("id_card")
    private String idCard;
    
    /**
     * 驾驶证号
     */
    @Size(max = 50, message = "驾驶证号长度不能超过50个字符")
    @TableField("license_number")
    private String licenseNumber;
    
    /**
     * 车牌号
     */
    @Size(max = 20, message = "车牌号长度不能超过20个字符")
    @TableField("vehicle_number")
    private String vehicleNumber;
    
    /**
     * 车辆类型(1-小型车,2-中型车,3-大型车)
     */
    @Min(value = 1, message = "车辆类型值无效")
    @Max(value = 3, message = "车辆类型值无效")
    @TableField("vehicle_type")
    private Integer vehicleType;
    
    /**
     * 载重量(公斤)
     */
    @DecimalMin(value = "0.0", message = "载重量不能为负数")
    @TableField("load_capacity")
    private BigDecimal loadCapacity;
    
    /**
     * 司机状态(0-空闲,1-忙碌,2-离线,3-停用)
     */
    @NotNull(message = "司机状态不能为空")
    @Min(value = 0, message = "司机状态值无效")
    @Max(value = 3, message = "司机状态值无效")
    @TableField("status")
    private Integer status;
    
    /**
     * 服务评分(1-5分)
     */
    @DecimalMin(value = "1.0", message = "服务评分不能低于1分")
    @DecimalMax(value = "5.0", message = "服务评分不能高于5分")
    @TableField("service_rating")
    private BigDecimal serviceRating;
    
    /**
     * 当前经度
     */
    @TableField("current_longitude")
    private BigDecimal currentLongitude;
    
    /**
     * 当前纬度
     */
    @TableField("current_latitude")
    private BigDecimal currentLatitude;
    
    /**
     * 当前地址
     */
    @Size(max = 200, message = "当前地址长度不能超过200个字符")
    @TableField("current_address")
    private String currentAddress;
    
    /**
     * 是否在线(0-离线,1-在线)
     */
    @TableField("is_online")
    private Integer isOnline;
    
    /**
     * 入职时间
     */
    @TableField("join_time")
    private LocalDateTime joinTime;
    
    /**
     * 最后活跃时间
     */
    @TableField("last_active_time")
    private LocalDateTime lastActiveTime;
    
    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    @TableField("remark")
    private String remark;
    
    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    /**
     * 创建人
     */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private Long createBy;
    
    /**
     * 更新人
     */
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private Long updateBy;
    
    /**
     * 逻辑删除标识(0-未删除,1-已删除)
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}